/**
 * 完成url拼接参数
 * @param url 链接
 * @param param 新参数对象
 * @example const url = createUrl('www.example.com',{key:'1',key2:'2'})
 */
export function createUrl(url: string, param?: Record<string, any>) {
    let tmp = ''
    if (!param) return url
    const obj = {
        ...urlParamToObject(url),
        ...param
    }
    for (const k in obj) {
        const value = obj[k] !== undefined ? obj[k] : ''
        tmp += '&' + k + '=' + encodeURIComponent(value)
    }
    const domain = getDomainUrl(url)
    return domain + '?' + tmp.slice(1);
}

/**
 * 从字符串中获取域名
 * @param url 字符串
 * @example cosnt domain = getDomainUrl('www.example.com?key=1&key2=2')
 */
export function getDomainUrl(url: string) {
    const webUrl = url.indexOf('?') ? url.split("?")[0] : url
    return webUrl;
}

/**
 * 链接GET参数转对象
 * @param url 链接
 * @example cosnt obj = urlParamToObject('www.example.com?key=1&key2=2')
 */
export function urlParamToObject(url: string) {
    const obj: Record<string, any> = {}
    if (url.indexOf("?") < 0) return obj
    const str = url.split("?")[1].split("&")
    for (let i = 0; i < str.length; i++) {
        const a = str[i].split('=')
        obj[a[0]] = a[1]
    }
    return obj
}

/**
 * 随机数字
 * @param min 最小值
 * @param max 最大值
 * @returns number 随机数
 */
export function randomNum(min: number, max: number) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

/**
 * 随机汉字与字母
 * @param str 汉字与字母的组合
 * @param len 长度
 * @param isUpper 是否大写
 */
export function randomStr(str: string, len: number, isUpper: boolean = false) {
    let result = '';
    for (let i = 0; i < len; i++) {
        let random = randomNum(0, str.length - 1);
        result += str.charAt(random);
    }
    if (isUpper) {
        return result.toUpperCase();
    }
    return result;
}

/**
 * 获取时间戳
 */
export function getTimestamp() {
    return new Date().getTime()
}

/**
 * 任意符号转空格
 * @param name 字符串
 * @param sign 符号
 */
export function wordSignToSpace(name: string, sign: string) {
    return name.replace(new RegExp(sign, 'g'), ' ');
}

/**
 * 转大驼峰命名
 * @param name 
 * @example wordToBigHump('word to big hump') => WordToBigHump
 */
export function wordToBigHump(name: string) {
    return name.replace(/\b\w/g, function (match) {
        return match.toUpperCase()
    }).replace(/\s+/g, '');
}